let ws = null;
let isConnected = false;
let reconnectTimer = null;
const RECONNECT_INTERVAL = 3000; // 重连间隔时间（毫秒）

// 初始化WebSocket连接
export function initWebSocket() {
    if (ws) {
        return;
    }
    
    const student = uni.getStorageSync('student');
    if (!student) {
        return;
    }

    // 替换为你的WebSocket服务器地址
    const wsUrl = `ws://localhost:8080/ws/${student.sSid}`;
    
    ws = new WebSocket(wsUrl);
    
    ws.onopen = () => {
        console.log('WebSocket连接已建立');
        isConnected = true;
        if (reconnectTimer) {
            clearInterval(reconnectTimer);
            reconnectTimer = null;
        }
        // 添加连接成功提示
        uni.showToast({
            title: 'WebSocket连接成功',
            icon: 'success',
            duration: 2000
        });
    };
    
    ws.onclose = () => {
        console.log('WebSocket连接已关闭');
        isConnected = false;
        ws = null;
        
        // 尝试重连
        if (!reconnectTimer) {
            reconnectTimer = setInterval(() => {
                if (!isConnected) {
                    initWebSocket();
                }
            }, RECONNECT_INTERVAL);
        }
    };
    
    ws.onerror = (error) => {
        console.error('WebSocket错误:', error);
        isConnected = false;
    };
    
    ws.onmessage = function (e) {
        try {
            // 尝试解析接收到的消息为 JSON 对象
            const data = JSON.parse(e.data);
            
            // 检查是否为预警消息
            if (data.type === 'warning' || data.msgType === 'warning' || data.msg && data.msg.includes('预警')) {
                // 判断预警类型
                let warningType = 'composite'; // 默认为综合预警
                
                // 根据消息内容判断预警类型
                if (data.msg && (data.msg.includes('成绩') || data.msg.includes('课程') || data.msg.includes('分数'))) {
                    warningType = 'score';
                } else if (data.msg && (data.msg.includes('综合') || data.msg.includes('学习') || data.msg.includes('态度') || data.msg.includes('习惯'))) {
                    warningType = 'composite';
                }
                
                // 增加未读预警消息计数
                increaseUnreadWarningCount();
                
                // 记录预警类型
                setLastWarningType(warningType);
                
                // 显示预警消息提示
                uni.showToast({ 
                    title: data.msg || data.content || '收到新的预警消息', 
                    icon: 'none', 
                    duration: 3000, 
                    position: 'top-right' 
                });
            } else if (data.msg) {
                uni.showToast({ 
                    title: data.msg, 
                    icon: 'none', 
                    duration: 2000, 
                    position: 'top-right' 
                });
            } else {
                // 处理没有 msg 字段的情况
                uni.showToast({ 
                    title: '收到未知格式消息', 
                    icon: 'none', 
                    duration: 2000, 
                    position: 'top-right' 
                });
            }
        } catch (error) {
            // 处理解析失败的情况
            uni.showToast({ 
                title: '消息解析失败，请检查消息格式', 
                icon: 'none', 
                duration: 2000, 
                position: 'top-right' 
            });
            console.error('消息解析失败:', error);
        }
    };
}

// 增加未读预警消息计数
function increaseUnreadWarningCount() {
    let currentCount = uni.getStorageSync('unreadWarningCount') || 0;
    currentCount++;
    uni.setStorageSync('unreadWarningCount', currentCount);
    
    // 触发全局事件，通知页面更新未读消息数量
    uni.$emit('updateUnreadWarningCount', currentCount);
}

// 重置未读预警消息计数
export function resetUnreadWarningCount() {
    uni.setStorageSync('unreadWarningCount', 0);
    uni.$emit('updateUnreadWarningCount', 0);
}

// 获取未读预警消息数量
export function getUnreadWarningCount() {
    return uni.getStorageSync('unreadWarningCount') || 0;
}

// 关闭WebSocket连接
export function closeWebSocket() {
    if (ws) {
        ws.close();
        ws = null;
        isConnected = false;
        if (reconnectTimer) {
            clearInterval(reconnectTimer);
            reconnectTimer = null;
        }
    }
}

// 发送消息
export function sendMessage(message) {
    if (ws && isConnected) {
        ws.send(JSON.stringify(message));
    } else {
        console.error('WebSocket未连接');
    }
}

// 处理接收到的消息
function handleMessage(data) {
    // 根据消息类型处理不同的业务逻辑
    switch (data.type) {
        case 'warning':
            // 处理预警消息
            uni.showToast({
                title: data.content,
                icon: 'none',
                duration: 3000
            });
            break;
        case 'system':
            // 处理系统消息
            break;
        default:
            console.log('未知消息类型:', data);
            uni.showToast({
                title: data.content,
                icon: 'none',
                duration: 3000
            });
    }
}

// 检查连接状态
export function checkConnection() {
    return isConnected;
}

// 记录最后收到的预警类型
function setLastWarningType(warningType) {
    uni.setStorageSync('lastWarningType', warningType);
    // 触发全局事件，通知页面更新预警类型
    uni.$emit('updateLastWarningType', warningType);
}

// 获取最后收到的预警类型
export function getLastWarningType() {
    return uni.getStorageSync('lastWarningType') || 'composite';
}

// 清除最后收到的预警类型
export function clearLastWarningType() {
    uni.removeStorageSync('lastWarningType');
    uni.$emit('updateLastWarningType', null);
}

console.log(uni);